package com.eyedog.uilibrary.base;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.view.View;

import java.util.ArrayList;
import java.util.List;

/**
 * created by jw200 at 2019/1/28 14:32
 **/
public abstract class BasePagerAdapter<T> extends PagerAdapter {
    protected Context mContext;

    protected List<T> mDatas = new ArrayList<T>();

    public T getItem(int position) {
        return mDatas == null ? null : mDatas.get(position);
    }

    /**
     * 获取所有数据
     */
    public List<T> getDatas() {
        return mDatas;
    }

    /**
     * 添加新数据到头部
     */
    public void addDatasAtFront(ArrayList<T> datas) {
        if (mDatas != null && datas != null && datas.size() > 0) {
            ArrayList<T> temp = new ArrayList<T>();
            temp.addAll(datas);
            temp.addAll(mDatas);
            mDatas.clear();
            mDatas.addAll(temp);
        }
    }

    /**
     * 添加新数据到末尾
     */
    public void add(T data) {
        if (data != null) {
            checkNullDatas();
            mDatas.add(data);
            notifyDataSetChanged();
        }
    }

    /**
     * 添加数据到指定位置
     */
    public void add(int position, T data) {
        if (data != null) {
            checkNullDatas();
            mDatas.add(position, data);
            notifyDataSetChanged();
        }
    }

    /**
     * 添加新数据到末尾
     */
    public void add(List<T> datas) {
        if (datas != null) {
            checkNullDatas();
            mDatas.addAll(datas);
            notifyDataSetChanged();
        }
    }

    /**
     * 添加数据到指定位置
     */
    public void add(int position, List<T> data) {
        if (data != null) {
            checkNullDatas();
            mDatas.addAll(position, data);
            notifyDataSetChanged();
        }
    }

    /**
     * 清空列表， 放入新数据
     */
    public void set(T data) {
        checkNullDatas();
        mDatas.clear();
        if (data != null) {
            mDatas.add(data);
        }
        notifyDataSetChanged();
    }

    /**
     * 清空列表， 放入新数据
     */
    public void set(List<T> datas) {
        if (datas != null) {
            mDatas = datas;
        }
        notifyDataSetChanged();
    }

    public void setData(List<T> datas) {
        mDatas.clear();
        if (datas != null && !datas.isEmpty()) {
            mDatas.addAll(datas);
        }
    }

    /**
     * 删除指定的位置数据
     */
    public T del(int position) {
        checkNullDatas();
        if (position < mDatas.size()) {
            T t = mDatas.remove(position);
            notifyDataSetChanged();
            return t;
        }
        return null;
    }

    /**
     * 删除指定数据
     */
    public void delete(T t) {
        checkNullDatas();
        if (mDatas.contains(t)) {
            mDatas.remove(t);
            notifyDataSetChanged();
        }
    }

    public void cleanData() {
        checkNullDatas();
        mDatas.clear();
    }

    protected void checkNullDatas() {
        if (mDatas == null) {
            mDatas = new ArrayList<T>();
        }
    }

    @Override
    public int getCount() {
        return mDatas.size();
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }
}
